package main

import "fmt"
import "math/rand"
import "time"

func main() {

	// 随机生成10个整数(1-100)保存到数组，并倒序打印。
	// 以及求平均值、最大值、最大值下标
	// 并查找里面是否有55


	rand.Seed(time.Now().UnixNano())

	var arr [10]int
	var sum int

	// 求均值
	for i, _ := range arr {

		arr[i] = rand.Intn(100)
		sum += arr[i]

	}	

	fmt.Println("平均值：", sum / len(arr))

	// 倒序打印
	var arr2 [10]int
	for i, v := range arr {

		arr2[len(arr2) - i - 1] = v

	}
	fmt.Println("正序打印：", arr)
	fmt.Println("倒序打印：", arr2)

	// 查找最大值下标
	var maxIndex int = 0
	var maxValue int = arr[0]
	for i, v := range arr {

		if v > maxValue {

			maxValue = v
			maxIndex = i

		}

	}
	fmt.Println("最大值下标为：", maxIndex)

	// 进行排序
	for i := 0; i < len(arr) - 1; i++ {

		for j := 0; j < len(arr) - 1 - i; j++ {

			if arr[j] > arr[j + 1] {

				tmp := arr[j]
				arr[j] = arr[j + 1]
				arr[j + 1] = tmp

			}

		}

	}

	fmt.Println("冒泡排序后：", arr)

	// 最大值
	fmt.Println("最大值为：", arr[len(arr) - 1])

	// 二分查找里面有没有55
	leftIndex := 0
	rightIndex := len(arr)
	middleIndex := len(arr) / 2

	for leftIndex < rightIndex {

		if arr[middleIndex] == 55 {

			fmt.Println("数组里头55的下标为：", middleIndex)
			break

		} else if arr[middleIndex] > 55 {

			leftIndex = middleIndex + 1
			middleIndex = (leftIndex + rightIndex) / 2

		} else {

			rightIndex = middleIndex - 1
			middleIndex = (leftIndex + rightIndex) / 2

		}

	}

	fmt.Println("左下标指向：", leftIndex)
	fmt.Println("右下标指向：", rightIndex)

	if leftIndex == rightIndex && (rightIndex == -1 || rightIndex > len(arr) - 1) {

		fmt.Println("数组里面没有找到55")

	}


}